package sifcom.Entidades;

import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;

import sifcom.Utilidades.Utilidades;

import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.repackaged.org.json.JSONException;
import com.google.appengine.repackaged.org.json.JSONObject;
import com.google.appengine.api.datastore.DatastoreService;


public class SocioData {

	public void SetSocio(BufferedReader reader) throws EntityNotFoundException, JSONException
	{
		Utilidades util = new Utilidades();
		
		JSONObject jsonSocio = util.getJsonObject(reader);
		
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
		
			//Delete
			if(jsonSocio.length() == 1 && jsonSocio.get("id") != null)
			{
				Entity socio = util.getEntity(jsonSocio.get("id").toString());					
				datastore.delete(socio.getKey());
			}
			
			//Create
			if(jsonSocio.length() > 1 && jsonSocio.get("id").toString().length() == 0)
			{
			Entity Socio = new Entity("Socio");
			this.setProperties(Socio, jsonSocio);	
			datastore.put(Socio);
			}
		
			//Update
			if(jsonSocio.length() > 1 && jsonSocio.get("id").toString().length() > 1)
			{
				Entity socio = util.getEntity(jsonSocio.get("id").toString());	
				this.setProperties(socio, jsonSocio);
				datastore.put(socio);
			}
	}

	public String getDataSocio(){
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
		Query q = new Query("Socio");

		PreparedQuery pq = datastore.prepare(q);
		
		return setDataJson(pq);
	}

	public String SearchSocio(String ced,String nombres, String apellidos){
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
		Query q = new Query("Socio");
		if(ced.length()>=1)
		q.addFilter("cedula_ruc", Query.FilterOperator.GREATER_THAN_OR_EQUAL, ced);
		if(nombres.length()>=1)
		q.addFilter("nombres", Query.FilterOperator.GREATER_THAN_OR_EQUAL, nombres);
		if(apellidos.length()>=1)
		q.addFilter("apellidos", Query.FilterOperator.GREATER_THAN_OR_EQUAL, apellidos);
		
		PreparedQuery pq = datastore.prepare(q);
		
		return setDataJson2(pq);
	}	
	
	private void setProperties(Entity Socio,JSONObject jsonSocio)
	{
		try{
			if(!jsonSocio.isNull("tipo_pers"))
				Socio.setProperty("tipo_pers", jsonSocio.get("tipo_pers"));
			
			if(!jsonSocio.isNull("cedula_ruc"))
				Socio.setProperty("cedula_ruc", jsonSocio.get("cedula_ruc"));
			
			if(!jsonSocio.isNull("apellidos"))
				Socio.setProperty("apellidos", jsonSocio.get("apellidos"));
			
			if(!jsonSocio.isNull("tipo_id"))
				Socio.setProperty("tipo_id", jsonSocio.get("tipo_id"));
			
			if(!jsonSocio.isNull("no_seguro"))
				Socio.setProperty("no_seguro", jsonSocio.get("no_seguro"));
			
			if(!jsonSocio.isNull("nombres"))
				Socio.setProperty("nombres", jsonSocio.get("nombres"));
			
			if(!jsonSocio.isNull("genero"))
				Socio.setProperty("genero", jsonSocio.get("genero"));
			
			if(!jsonSocio.isNull("provincia"))
				Socio.setProperty("provincia", jsonSocio.get("provincia"));
			
			if(!jsonSocio.isNull("sector"))
				Socio.setProperty("sector", jsonSocio.get("sector"));
			
			if(!jsonSocio.isNull("f_nac"))
				Socio.setProperty("f_nac", jsonSocio.get("f_nac"));
			
			if(!jsonSocio.isNull("canton"))
				Socio.setProperty("canton", jsonSocio.get("canton"));
			
			if(!jsonSocio.isNull("comunidad"))
				Socio.setProperty("comunidad", jsonSocio.get("comunidad"));
			
			if(!jsonSocio.isNull("estado_civil"))
				Socio.setProperty("estado_civil", jsonSocio.get("estado_civil"));
			
			if(!jsonSocio.isNull("parroquia"))
				Socio.setProperty("parroquia", jsonSocio.get("parroquia"));
			
			if(!jsonSocio.isNull("telefono"))
				Socio.setProperty("telefono", jsonSocio.get("telefono"));
			
			if(!jsonSocio.isNull("educacion"))
				Socio.setProperty("educacion", jsonSocio.get("educacion"));
			
			if(!jsonSocio.isNull("direccion"))
				Socio.setProperty("direccion", jsonSocio.get("direccion"));
			
			if(!jsonSocio.isNull("celular"))
				Socio.setProperty("celular", jsonSocio.get("celular"));
			
			if(!jsonSocio.isNull("trabajo_ocupacion"))
				Socio.setProperty("trabajo_ocupacion", jsonSocio.get("trabajo_ocupacion"));
			
			if(!jsonSocio.isNull("representante"))
				Socio.setProperty("representante", jsonSocio.get("representante"));
			
			if(!jsonSocio.isNull("beneficiario"))
				Socio.setProperty("beneficiario", jsonSocio.get("beneficiario"));
			
			if(!jsonSocio.isNull("trabajo_profesion"))
				Socio.setProperty("trabajo_profesion", jsonSocio.get("trabajo_profesion"));
			
			if(!jsonSocio.isNull("trabajo_empresa"))
				Socio.setProperty("trabajo_empresa", jsonSocio.get("trabajo_empresa"));
			
			if(!jsonSocio.isNull("trabajo_direccion"))
				Socio.setProperty("trabajo_direccion", jsonSocio.get("trabajo_direccion"));
			
			if(!jsonSocio.isNull("trabajo_telefono"))
				Socio.setProperty("trabajo_telefono", jsonSocio.get("trabajo_telefono"));
			
			if(!jsonSocio.isNull("conyuge_identificacion"))
				Socio.setProperty("conyuge_identificacion", jsonSocio.get("conyuge_identificacion"));
			
			if(!jsonSocio.isNull("conyuge_apellidos"))
				Socio.setProperty("conyuge_apellidos", jsonSocio.get("conyuge_apellidos"));
			
			if(!jsonSocio.isNull("conyuge_nombre"))
				Socio.setProperty("conyuge_nombre", jsonSocio.get("conyuge_nombre"));		
	}
	catch(JSONException ex)
	{
		ex.printStackTrace();
	}
	}

	private String setDataJson(PreparedQuery pq)
	{
		JSONObject json = new JSONObject();
		List<String> js= new ArrayList<String>();		
		try{
		for (Entity result : pq.asIterable()) {
			json.put("id", KeyFactory.keyToString(result.getKey())); //KeyFactory.keyToString(
			json.put("tipo_pers", result.getProperty("tipo_pers"));
			json.put("cedula_ruc", result.getProperty("cedula_ruc"));
			json.put("apellidos", result.getProperty("apellidos"));
			json.put("tipo_id", result.getProperty("tipo_id"));
			json.put("no_seguro", result.getProperty("no_seguro"));
			json.put("nombres", result.getProperty("nombres"));
			json.put("genero", result.getProperty("genero"));
			json.put("provincia", result.getProperty("provincia"));
			json.put("sector", result.getProperty("sector"));
			json.put("f_nac", result.getProperty("f_nac"));
			json.put("canton", result.getProperty("canton"));
			json.put("comunidad", result.getProperty("comunidad"));
			json.put("estado_civil", result.getProperty("estado_civil"));
			json.put("parroquia", result.getProperty("parroquia"));
			json.put("telefono", result.getProperty("telefono"));
			json.put("educacion", result.getProperty("educacion"));
			json.put("direccion", result.getProperty("direccion"));
			json.put("celular", result.getProperty("celular"));
			json.put("trabajo_ocupacion", result.getProperty("trabajo_ocupacion"));
			json.put("representante", result.getProperty("representante"));
			json.put("beneficiario", result.getProperty("beneficiario"));
			json.put("trabajo_profesion", result.getProperty("trabajo_profesion"));
			json.put("trabajo_empresa", result.getProperty("trabajo_empresa"));
			json.put("trabajo_direccion", result.getProperty("trabajo_direccion"));
			json.put("trabajo_telefono", result.getProperty("trabajo_telefono"));
			json.put("conyuge_identificacion", result.getProperty("conyuge_identificacion"));
			json.put("conyuge_apellidos", result.getProperty("conyuge_apellidos"));
			json.put("conyuge_nombre", result.getProperty("conyuge_nombre"));
			js.add(json.toString());
		}
		
		String myOut = "{\"success\":true,\"message\":\"Load Data\",\"data\":"+js.toString()+"}"; 
		
		return myOut;
		}
		catch(JSONException ex)
		{
			ex.printStackTrace();
			return null;
		}		
	}

	private String setDataJson2(PreparedQuery pq)
	{
		JSONObject json = new JSONObject();
		List<String> js= new ArrayList<String>();		
		try{
		for (Entity result : pq.asIterable()) {
			json.put("id", KeyFactory.keyToString(result.getKey())); //KeyFactory.keyToString(
			json.put("tipo_pers", result.getProperty("tipo_pers"));
			json.put("cedula_ruc", result.getProperty("cedula_ruc"));
			json.put("apellidos", result.getProperty("apellidos"));
			json.put("tipo_id", result.getProperty("tipo_id"));
			json.put("no_seguro", result.getProperty("no_seguro"));
			json.put("nombres", result.getProperty("nombres"));
			json.put("genero", result.getProperty("genero"));
			json.put("provincia", result.getProperty("provincia"));
			json.put("sector", result.getProperty("sector"));
			json.put("f_nac", result.getProperty("f_nac"));
			json.put("canton", result.getProperty("canton"));
			json.put("comunidad", result.getProperty("comunidad"));
			json.put("estado_civil", result.getProperty("estado_civil"));
			json.put("parroquia", result.getProperty("parroquia"));
			json.put("telefono", result.getProperty("telefono"));
			json.put("educacion", result.getProperty("educacion"));
			json.put("direccion", result.getProperty("direccion"));
			json.put("celular", result.getProperty("celular"));
			json.put("trabajo_ocupacion", result.getProperty("trabajo_ocupacion"));
			json.put("representante", result.getProperty("representante"));
			json.put("beneficiario", result.getProperty("beneficiario"));
			json.put("trabajo_profesion", result.getProperty("trabajo_profesion"));
			json.put("trabajo_empresa", result.getProperty("trabajo_empresa"));
			json.put("trabajo_direccion", result.getProperty("trabajo_direccion"));
			json.put("trabajo_telefono", result.getProperty("trabajo_telefono"));
			json.put("conyuge_identificacion", result.getProperty("conyuge_identificacion"));
			json.put("conyuge_apellidos", result.getProperty("conyuge_apellidos"));
			json.put("conyuge_nombre", result.getProperty("conyuge_nombre"));
			js.add(json.toString());
		}
		
		String myOut = "{\"success\":true,\"message\":\"SEarch\",\"data\":"+js.toString()+"}"; 
		
		return myOut;
		}
		catch(JSONException ex)
		{
			ex.printStackTrace();
			return null;
		}		
	}	
}
